用Python识别图形验证码,实现自动登陆!

您所在的位置:网站首页 python 验证码图片 模拟登录 用Python识别图形验证码,实现自动登陆!

用Python识别图形验证码,实现自动登陆!

#用Python识别图形验证码,实现自动登陆!| 来源: 网络整理| 查看: 265

有态度地学习

验证码有图形验证码、极验滑动验证码、点触验证码、宫格验证码。这回重点讲讲图形验证码的识别。

虽说图形验证码最简单,但是对于我这等新手,还是要苦学一番。首先寻找测试网站,网站选的是如云阁小说网,小网站不怕被封。他们的验证码一般如下:

用Python识别图形验证码,实现自动登陆!_java

可以看出有微弱的干扰线和较强的干扰点,验证码是没有边框的,这里为了排版好看,我加上去的...

1.  灰度处理   把彩色验证码图片转为灰色的图片。

用Python识别图形验证码,实现自动登陆!_java_02

import cv2image = cv2.imread('1.jpeg', 0)cv2.imwrite('1.jpg', image)

2.  二值化处理   将图片处理为只有黑白两色的图片,这里发现干扰线没有了,这就意味着我们只需要处理干扰点即可。

用Python识别图形验证码,实现自动登陆!_java_03

import cv2image = cv2.imread('1.jpeg', 0)ret, image = cv2.threshold(image, 100, 255, 1)height, width = image.shapenew_image = image[0:height, 0:150]cv2.imwrite('1.jpg', new_image)

3.  降噪处理   去除小黑点,也就是孤立的黑色像素点。

用Python识别图形验证码,实现自动登陆!_java_04

点降噪原理就是检测黑色点相邻的8个点,判断8个点的颜色情况。如果全是白点,那么就认为这个点是白色的,做黑点变白点处理。如⑤点处,以田字格来看,相邻共有8个区域。

用Python识别图形验证码,实现自动登陆!_java_05

①②③点坐标如下图,同理可知④⑤⑥⑦⑧⑨点坐标情况

用Python识别图形验证码,实现自动登陆!_java_06

降噪代码如下:

import cv2import numpy as npfrom PIL import Imagedef inverse_color(image, col_range):    # 读取图片,0意味着图片变为灰度图    image = cv2.imread(image, 0)    # 图片二值化,100为设置阀值,255为最大阀值,1为阀值类型,当前点值大于阀值,设置为0,否则设置为255。ret是return value缩写,代表当前的阀值    ret, image = cv2.threshold(image, 110, 255, 1)    # 图片的高度和宽度    height, width = image.shape    # 图片反色处理,原因:上面的处理只能生成白字黑底的图片,而我们需要的是黑字白底的图片    img2 = image.copy()    for i in range(height):        for j in range(width):            img2[i, j] = (255 - image[i, j])    img = np.array(img2)    # 对处理后的图片做截取    height, width = img.shape    new_image = img[0:height, col_range[0]:col_range[1]]    cv2.imwrite('handle_one.png', new_image)    image = Image.open('handle_one.png')    return imagedef clear_noise(img):    # 图片降噪处理    x, y = img.width, img.height    for i in range(x):        for j in range(y):            if sum_9_region(img, i, j)  div.main > div > form > ul > li:nth-child(5) > input[type="submit"]')))        button_2.click()        time.sleep(5)    else:        return auto_login()def handle_verification_code(img):    img = inverse_color(img, (0, 160))    img = clear_noise(img)    return imgdef main():    auto_login()if __name__ == '__main__':    main()    # 结束程序    exit()

这里用会声会影给视频加了个BGM,不过结尾的时候不是很搭,水平有限呐!还是得好好多学习。视频如下:

用Python识别图形验证码,实现自动登陆!_java_10

公众号回复自动登陆。获取验证码图片和全部源码。

觉得文章不错的,文末点个赞,比心!!!

···  END  ···

用Python识别图形验证码,实现自动登陆!_java_11



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3